﻿namespace Trace
{
    /// <summary>
    /// Typ parametru metody.
    /// </summary>
    public enum ParameterType
    {
        /// <summary>
        /// Nieokreślona lista parametrów.
        /// </summary>
        Params,
        /// <summary>
        /// Parametr wejściowy.
        /// </summary>
        In,
        /// <summary>
        /// Parametr wyjściowy.
        /// </summary>
        Out,
        /// <summary>
        /// Parametr wejściowo-wyjściowy.
        /// </summary>
        Ref
    }

    /// <summary>
    /// Struktura gromadzi wszystkie informacje niezbędne do prawidłowego śledzenia parametru metody.
    /// </summary>
    public struct ParameterInfo
    {
        /// <summary>
        /// Typ parametru.
        /// </summary>
        public ParameterType Type;
        /// <summary>
        /// Nazwa parametru.
        /// </summary>
        public string Name;
        /// <summary>
        /// Wartość paramerru.
        /// </summary>
        public object Value;

        /// <summary>
        /// Tworzy nowy obiekt struktury.
        /// </summary>
        /// <param name="type">Typ parametru.</param>
        /// <param name="name">Nazwa parametru.</param>
        /// <param name="value">Wartość parametru.</param>
        public ParameterInfo(ParameterType type, string name, object value)
        {
            this.Type = type;
            this.Name = name;
            this.Value = value;
        }
    }
}
